/**
 * 文件名：@ForwardView.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.springmvc.view <br/>
 * 项目名：afw-mvc-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.springmvc.view;

import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.view.AbstractView;

/**
 * 类名：ForwardView  <br />
 *
 * 功能：重定向视图
 *
 * @author xtwin <br />
 * 创建时间：2015年12月3日 下午5:05:08  <br />
 * @version 2015年12月3日
 */
public abstract class ForwardView extends AbstractView {
	
	// 日志记录器
	private static final Log logger = LogFactory.getLog(ForwardView.class);
	
	// 前缀
	protected String prefix = "";
	
	// 后缀
	protected String suffix = "";

	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月3日 下午5:07:13<br/>
	 * 
	 * @param model
	 * @param request
	 * @param response
	 * @throws Exception <br/>
	 * @see org.springframework.web.servlet.view.AbstractView#renderMergedOutputModel(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
		if (null != model) {
			// 将模型中的数据放入到request中，用于页面取值
			for (Entry<String, Object> entry : model.entrySet()) {
				request.setAttribute(entry.getKey(), entry.getValue());
			}
		}
		
		String location = new StringBuilder(prefix).append(getLocation(request, response)).append(suffix).toString();
		
		if (logger.isDebugEnabled()) {
			logger.debug("render.location.is " + location);
		}
		
		// 执行跳转
		request.getRequestDispatcher(location).forward(request, response);
	}

	/**
	 * 
	 * 功能：获取资源路径 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2015年12月3日 下午5:08:09 <br/>
	 */
	protected abstract String getLocation(HttpServletRequest request, HttpServletResponse response);

	/**
	 * @version 2015年12月3日-下午5:08:44
	 */
	public void setPrefix(String prefix) {
		this.prefix = prefix;
	}

	/**
	 * @version 2015年12月3日-下午5:08:44
	 */
	public void setSuffix(String suffix) {
		this.suffix = suffix;
	}
}
